// 网络请求工具
const request = {
  // 基础URL，实际开发中替换为真实API地址
  baseUrl: 'https://api.example.com',
  
  /**
   * 通用请求方法
   * @param {Object} options 请求选项
   * @returns {Promise} Promise对象
   */
  request: function(options) {
    return new Promise((resolve, reject) => {
      wx.request({
        url: this.baseUrl + options.url,
        data: options.data,
        method: options.method || 'GET',
        header: {
          'content-type': 'application/json',
          ...options.header
        },
        success: (res) => {
          // 判断状态码
          if (res.statusCode >= 200 && res.statusCode < 300) {
            resolve(res.data);
          } else {
            // 处理错误状态码
            console.error('请求失败', res);
            reject({
              code: res.statusCode,
              msg: res.data.message || '请求失败'
            });
            
            // 显示错误提示
            wx.showToast({
              title: '网络请求失败',
              icon: 'none'
            });
          }
        },
        fail: (err) => {
          console.error('请求错误', err);
          reject(err);
          
          // 显示错误提示
          wx.showToast({
            title: '网络连接失败',
            icon: 'none'
          });
        }
      });
    });
  },
  
  /**
   * GET请求
   * @param {string} url 请求路径
   * @param {Object} data 请求参数
   * @param {Object} header 请求头
   * @returns {Promise} Promise对象
   */
  get: function(url, data = {}, header = {}) {
    return this.request({
      url,
      data,
      method: 'GET',
      header
    });
  },
  
  /**
   * POST请求
   * @param {string} url 请求路径
   * @param {Object} data 请求参数
   * @param {Object} header 请求头
   * @returns {Promise} Promise对象
   */
  post: function(url, data = {}, header = {}) {
    return this.request({
      url,
      data,
      method: 'POST',
      header
    });
  },
  
  /**
   * 搜索视频的API
   * @param {string} keyword 搜索关键词
   * @returns {Promise} Promise对象
   */
  searchVideos: function(keyword) {
    return this.get('/search/videos', { keyword });
  },
  
  /**
   * 上传图片进行识别
   * @param {string} filePath 图片临时路径
   * @returns {Promise} Promise对象
   */
  uploadImage: function(filePath) {
    return new Promise((resolve, reject) => {
      wx.uploadFile({
        url: this.baseUrl + '/upload/image',
        filePath: filePath,
        name: 'image',
        success: (res) => {
          try {
            const data = JSON.parse(res.data);
            resolve(data);
          } catch (error) {
            reject(error);
          }
        },
        fail: (err) => {
          reject(err);
        }
      });
    });
  }
};

module.exports = request;